package com.courir;

import lombok.Data;
import lombok.Delegate;
import lombok.val;

import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

import com.courir.data.Altersgruppe;
import com.courir.data.Teilnehmer;
import com.google.common.base.Joiner;
import com.google.common.base.Strings;

/**
 * Die Teilnehmerdaten ergänzt um Metainformationen, wie Zeit und Raum, gedacht
 * ausschließlich für den Ausdruck.
 * 
 * @author giese
 */
@Data
public class XTeilnehmer {
	private static final DateTimeFormatter ZeitFormat = DateTimeFormat
			.forPattern("H:mm:ss");

	private final DateTime datum;

	/** Gilt für -diesen- Teilnehmer. */
	@Delegate
	private final Teilnehmer teilnehmer;

	private Integer gesamtPlatz;
	private Integer platz;

	public int getJahrgang() {
		return getGeburtsdatum().getYear();
	}

	public Altersgruppe getAltersgruppe() {
		val age = datum.getYear() - getJahrgang();
		return getLauf().get(getGeschlecht(), age);
	}

	/** Zeit in einem einfach zu verarbeitenden String-Format. */
	public String getZeitString() {
		return ZeitFormat.print(datum.withDurationAdded(getZeit(), 1));
	}

	private static final Joiner NameJoiner = Joiner.on(", ").skipNulls();

	public String getName() {
		return NameJoiner.join(Strings.emptyToNull(getNachname()),
				Strings.emptyToNull(getVorname()));
	}
}